<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>
<body>
    <h3>构造函数 ： 添加属性 </h3> 
    <h3>原型对象 ： 添加方法 </h3>

    <script>
        // A 和 B 对象
        // 定义A构造函数
        var A = function(_name){
            this.name = _name;
        }
        A.prototype.foo = function(){
            console.log("这是"+this.name);
        }
        // 创建A构造函数的实例
        var a1 = new A("小明");
        console.log(a1);


        // 定义B构造函数
        var B = function(_name){
            // 用当前的函数作用域的this替换A构造函数作用域的this
            A.call(this,_name);
            this.age = 23;
        }
        // 原型
        B.prototype = {
            constructor: B,
            foo: a1.foo,
            say: function(){
                console.log(this);
            }
        }


        // 创建B构造函数的实例
        var b1 = new B("小红");
        console.log(b1);
        b1.foo();

        // B对象拥有A对象的属性和方法
        // 另外B对象还可以拥有自身属性和方法


    </script>
</body>
</html>